package com.ec.as.service;

import com.ec.as.domain.dto.LeaveRequestDTO;
import com.ec.as.domain.dto.LeaveRequestQueryDTO;
import com.ec.as.domain.po.LeaveRequest;
import com.ec.common.domain.PageVO;
import com.ec.common.domain.Result;

public interface LeaveRequestService {
    /**
     * 老人提交请假申请
     * @param dto 请假申请信息
     * @return 申请结果
     */
    Result<LeaveRequest> submitLeaveRequest(LeaveRequestDTO dto);

    /**
     * 老人取消未审核的请假申请
     * @param id 申请ID
     * @return 取消结果
     */
    Result<Void> cancelPendingLeaveRequest(Long id);

    /**
     * 老人提交取消已批准的请假申请（需管理员审核）
     * @param id 申请ID
     * @return 提交取消结果
     */
    Result<Void> submitCancelApprovedLeaveRequest(Long id);

    /**
     * 管理员审核请假申请
     * @param id 申请ID
     * @param approve 是否通过（true: 批准, false: 拒绝）
     * @param adminId 管理员ID
     * @return 审核结果
     */
    Result<Void> reviewLeaveRequest(Long id, boolean approve, Integer adminId);

    /**
     * 管理员审核取消申请
     * @param id 申请ID
     * @param approve 是否通过（true: 批准取消, false: 拒绝取消）
     * @param adminId 管理员ID
     * @return 审核结果
     */
    Result<Void> reviewCancelRequest(Long id, boolean approve, Integer adminId);

    /**
     * 查询请假申请列表（支持筛选和分页）
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    Result<PageVO<LeaveRequest>> listLeaveRequests(LeaveRequestQueryDTO queryDTO);
}